package game.utils;

/**
 * IPv4AddressUtil 类实现 IPv4 地址转换为一个整数的功能.
 * @author wizardc
 */
public class IPv4AddressUtil
{
    /**
     * 将 IPv4 地址转换为一个整数.
     * @param ipAddress 需要转换的 IPv4 地址.
     * @return 该 IPv4 地址对应的整数.
     */
    public static long ip2Long(String ipAddress)
    {
        long[] ip = new long[4];
        int p1 = ipAddress.indexOf(".");
        int p2 = ipAddress.indexOf(".", p1 + 1);
        int p3 = ipAddress.indexOf(".", p2 + 1);
        ip[0] = Long.parseLong(ipAddress.substring(0, p1));
        ip[1] = Long.parseLong(ipAddress.substring(p1+1, p2));
        ip[2] = Long.parseLong(ipAddress.substring(p2+1, p3));
        ip[3] = Long.parseLong(ipAddress.substring(p3+1));
        return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
    }

    /**
     * 将一个整数转换为 IPv4 地址.
     * @param ipLong 需要转换的 整数.
     * @return 对应的 IPv4 地址.
     */
    public static String long2IP(long ipLong)
    {
        StringBuffer buffer = new StringBuffer("");
        buffer.append(String.valueOf((ipLong >>> 24)));
        buffer.append(".");
        buffer.append(String.valueOf((ipLong & 0x00FFFFFF) >>> 16));
        buffer.append(".");
        buffer.append(String.valueOf((ipLong & 0x0000FFFF) >>> 8));
        buffer.append(".");
        buffer.append(String.valueOf((ipLong & 0x000000FF)));
        return buffer.toString();
    }
}
